[Tips] SOQLでSELECT DISTINCTする
Salesforceで使用できる問い合わせ言語SOQL(Salesforce Object Query Language)にはDISTINCT
が存在しません。
DISTINCTのように重複をまとめて取得したい場合はGROUP BYを使って次のようなSOQLを書くと上手くいきます。
SELECT lastName, firstName FROM Contact WHERE Account.Name = '○×株式会社' GROUP BY lastName, firstName
GROUP BYで指定したlastName、firstNameで値をまとめて、◯×株式会社の取引先責任者の氏名を重複なしでSELECTしています。
他の集計関数と組み合わせることももちろん可能で、例えば重複回数が2件以上あるものだけ取り出したい時は次のようにします。
SELECT lastName, firstName FROM Contact WHERE Account.Name = '○×株式会社' GROUP BY lastName, firstName HAVING COUNT(Name) >= 2
SOQLでは列の値を結合するCONCAT
も使えないので、列の値の組み合わせに対して集合関数を使うためには、列の値を結合する数式をあらかじめ用意しておく必要があります。
この例では、lastNameとfirstNameの結合値として標準項目のNameがあるので、これを使っています。